
/*-------------------------------------------------------------*/
/*--- Public header file for the library. ---*/
/*--- bzlib.h ---*/
/*-------------------------------------------------------------*/

/* ------------------------------------------------------------------
 This file is part of bzip2/libbzip2, a program and library for
 lossless, block-sorting data compression.

 bzip2/libbzip2 version 1.0.6 of 6 September 2010
 Copyright (C) 1996-2010 Julian Seward <jseward@bzip.org>

 Please read the WARNING, DISCLAIMER and PATENTS sections in the
 README file.

 This program is released under the terms of the license contained
 in the file LICENSE.
 ------------------------------------------------------------------ */


#ifndef _BZLIB_H
#define _BZLIB_H

#ifdef __cplusplus
extern "C" {
#endif

#define BZ_RUN 0
#define BZ_FLUSH 1
#define BZ_FINISH 2

#define BZ_OK 0
#define BZ_RUN_OK 1
#define BZ_FLUSH_OK 2
#define BZ_FINISH_OK 3
#define BZ_STREAM_END 4
#define BZ_SEQUENCE_ERROR (-1)
#define BZ_PARAM_ERROR (-2)
#define BZ_MEM_ERROR (-3)
#define BZ_DATA_ERROR (-4)
#define BZ_DATA_ERROR_MAGIC (-5)
#define BZ_IO_ERROR (-6)
#define BZ_UNEXPECTED_EOF (-7)
#define BZ_OUTBUFF_FULL (-8)
#define BZ_CONFIG_ERROR (-9)

typedef struct {
 char *next_in;
 unsigned avail_in;
 unsigned total_in_lo32;
 unsigned total_in_hi32;
 char *next_out;
 unsigned avail_out;
 unsigned total_out_lo32;
 unsigned total_out_hi32;
 void *state;
 void *(*bzalloc)(void *,int,int);
 void (*bzfree)(void *,void *);
 void *opaque;
} bz_stream;


#ifndef BZ_IMPORT
#define BZ_EXPORT
#endif

#ifndef BZ_NO_STDIO
/* Need a definitition for FILE */
#include <stdio.h>
#endif

#ifdef _WIN32
# include <windows.h>
# ifdef small
 /* windows.h define small to char */
# undef small
# endif
# ifdef BZ_EXPORT
# define BZ_API(func) WINAPI func
# define BZ_EXTERN extern
# else
 /* import windows dll dynamically */
# define BZ_API(func) (WINAPI * func)
# define BZ_EXTERN
# endif
#else
# define BZ_API(func) func
# define BZ_EXTERN extern
#endif


/*-- Core (low-level) library functions --*/

BZ_EXTERN int BZ_API(BZ2_bzCompressInit) (bz_stream* strm, int blockSize100k, int verbosity, int workFactor );

BZ_EXTERN int BZ_API(BZ2_bzCompress) (bz_stream* strm, int action);

BZ_EXTERN int BZ_API(BZ2_bzCompressEnd) (bz_stream* strm);

BZ_EXTERN int BZ_API(BZ2_bzDecompressInit) (bz_stream *strm,int verbosity,int small);

BZ_EXTERN int BZ_API(BZ2_bzDecompress) (bz_stream* strm);

BZ_EXTERN int BZ_API(BZ2_bzDecompressEnd) (bz_stream *strm);

/*-- High(er) level library functions --*/

#ifndef BZ_NO_STDIO
#define BZ_MAX_UNUSED 5000

typedef void BZFILE;

BZ_EXTERN BZFILE* BZ_API(BZ2_bzReadOpen) (int* bzerror,FILE* f,int verbosity,int small,void* unused,int nUnused);

BZ_EXTERN void BZ_API(BZ2_bzReadClose) (int* bzerror,BZFILE* b);

BZ_EXTERN void BZ_API(BZ2_bzReadGetUnused) (int* bzerror,BZFILE* b,void** unused,int* nUnused);

BZ_EXTERN int BZ_API(BZ2_bzRead) (int* bzerror,BZFILE* b,void* buf,int len);

BZ_EXTERN BZFILE* BZ_API(BZ2_bzWriteOpen) (int* bzerror,FILE* f,int blockSize100k,int verbosity,int workFactor);

BZ_EXTERN void BZ_API(BZ2_bzWrite) (int* bzerror,BZFILE* b,void* buf,int len);

BZ_EXTERN void BZ_API(BZ2_bzWriteClose) (int* bzerror,BZFILE* b,int abandon,unsigned* nbytes_in,unsigned* nbytes_out);

BZ_EXTERN void BZ_API(BZ2_bzWriteClose64) (int* bzerror,BZFILE* b,int abandon,unsigned* nbytes_in_lo32,unsigned* nbytes_in_hi32,unsigned* nbytes_out_lo32,unsigned* nbytes_out_hi32);
#endif

/*-- Utility functions --*/

BZ_EXTERN int BZ_API(BZ2_bzBuffToBuffCompress) (
 char* dest,
 unsigned* destLen,
 char* source,
 unsigned sourceLen,
 int blockSize100k,
 int verbosity,
 int workFactor
 );

BZ_EXTERN int BZ_API(BZ2_bzBuffToBuffDecompress) (char* dest,unsigned* destLen,char* source,unsigned sourceLen,int small,int verbosity);

/*--
 Code contributed by Yoshioka Tsuneo (tsuneo@rr.iij4u.or.jp)
 to support better zlib compatibility.
 This code is not _officially_ part of libbzip2 (yet);
 I haven't tested it, documented it, or considered the
 threading-safeness of it.
 If this code breaks, please contact both Yoshioka and me.
--*/

BZ_EXTERN const char * BZ_API(BZ2_bzlibVersion) ();

#ifndef BZ_NO_STDIO
BZ_EXTERN BZFILE * BZ_API(BZ2_bzopen) (const char *path,const char *mode);

BZ_EXTERN BZFILE * BZ_API(BZ2_bzdopen) (int fd,const char *mode);

BZ_EXTERN int BZ_API(BZ2_bzread) (BZFILE* b,void* buf,int len);

BZ_EXTERN int BZ_API(BZ2_bzwrite) (BZFILE* b,void* buf,int len);

BZ_EXTERN int BZ_API(BZ2_bzflush) (BZFILE* b);

BZ_EXTERN void BZ_API(BZ2_bzclose) (BZFILE* b);

BZ_EXTERN const char * BZ_API(BZ2_bzerror) (BZFILE *b,int *errnum);
#endif

#ifdef __cplusplus
}
#endif

#endif

#ifndef NOT_USE_BZLIB
#ifdef _DEBUG
#pragma comment(lib,"libbz2d.lib");
#else
#pragma comment(lib,"libbz2.lib");
#endif
#endif
/*-------------------------------------------------------------*/
/*--- end bzlib.h ---*/
/*-------------------------------------------------------------*/
